/*
 * @Author: Seon.Hu SeonHu@126.com
 * @Date: 2024-01-18 19:05:12
 * @LastEditors: Seon.Hu SeonHu@126.com
 * @LastEditTime: 2024-04-10 17:59:01
 * @FilePath: \bg-vben\src\components\AdChooseList\src\props.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { PageRequest, PageData, FilterGroup } from '@/utils/common/types';
import { propTypes } from '@/utils/propTypes';
import { FilterOperateEnum } from '@/enums/filterOperateEnum';
import { AdColumn } from '@/components/AdVxeTable';
import { FetchSetting } from '@/components/Table';
import { SizeType } from './types';

/** 对话框选项 */
export const dialogProps = {
  /** 对话框标识 */
  id: propTypes.string,
  /** 宽度 */
  width: {
    type: [String, Number] as PropType<string | number>,
    default: '60%',
  },
  /** 高度 */
  height: {
    type: [String, Number] as PropType<string | number>,
    default: '560px',
  },
  /** 标题 */
  title: propTypes.string.def(''),
  /** 表格尺寸 */
  tableSize: {
    type: String as PropType<SizeType>,
    default: 'small',
  },
  /** 数据 */
  data: {
    type: Array as PropType<Recordable[]>,
    default: null,
  },
  /** 数据请求接口 */
  api: {
    type: Function as PropType<(params: PageRequest) => Promise<PageData>>,
    default: null,
  },
  /** 额外的请求参数 */
  searchInfo: {
    type: Object as PropType<FilterGroup>,
    default: null,
  },
  /** 查询条件请求之前处理 */
  searchInfoFn: {
    type: Function as PropType<(info: FilterGroup) => Promise<FilterGroup>>,
    default: null,
  },
  /** 请求之前处理参数 */
  beforeFetch: {
    type: Function as PropType<Fn>,
    default: null,
  },
  /** 请求之后处理返回参数 */
  afterFetch: {
    type: Function as PropType<Fn>,
    default: null,
  },
  /** 请求配置 */
  fetchSetting: {
    type: Object as PropType<Partial<FetchSetting>>,
    default: null,
  },
  /** 表格列配置 */
  columns: {
    type: Array as PropType<AdColumn[]>,
    default: () => [],
  },
  /** 是否多选 */
  multiple: {
    type: [Boolean, Function] as PropType<boolean | (() => boolean)>,
    default: () => {
      return true;
    },
  },
  /** 选择函数，当返回值为 false 时阻止弹出关闭。 */
  selectFn: {
    type: Function as PropType<(data: Recordable[]) => Promise<boolean | undefined | void>>,
    default: null,
  },
};

/** 高级选择列表选项 */
export const adChooseListProps = {
  /** 绑定字段 */
  field: { type: String, required: true },
  /** 绑定的值 */
  value: { type: String, default: null },
  /** 筛选字段-默认绑定字段 */
  filterField: { type: String, default: null },
  /** 筛选操作 */
  filterOperate: {
    type: Number as PropType<FilterOperateEnum>,
    default: null,
  },
  /** 是否验证数据 */
  validate: propTypes.bool.def(true),
  /** 数据 */
  data: {
    type: Array as PropType<Recordable[]>,
    default: null,
  },
  /** 数据请求接口 */
  api: {
    type: Function as PropType<(params: PageRequest) => Promise<PageData>>,
    default: null,
  },
  /** 额外的请求参数 */
  searchInfo: {
    type: Object as PropType<FilterGroup>,
    default: null,
  },
  /** 查询条件请求之前处理 */
  searchInfoFn: {
    type: Function as PropType<(info: FilterGroup) => Promise<FilterGroup>>,
    default: null,
  },
  /** 请求之前处理参数 */
  beforeFetch: {
    type: Function as PropType<Fn>,
    default: null,
  },
  /** 请求之后处理返回参数 */
  afterFetch: {
    type: Function as PropType<Fn>,
    default: null,
  },
  /** 请求配置 */
  fetchSetting: {
    type: Object as PropType<Partial<FetchSetting>>,
    default: null,
  },
  /** 表格列配置 */
  columns: {
    type: Array as PropType<AdColumn[]>,
    default: () => [],
  },
  /** 值更改函数 */
  changeFn: {
    type: Function as PropType<(data: Recordable) => Promise<void>>,
    default: null,
  },
  /** 选择函数，当返回值为 false 时阻止弹出关闭。 */
  selectFn: {
    type: Function as PropType<(data: Recordable[]) => Promise<boolean | undefined | void>>,
    default: null,
  },
  /** 输入框尺寸 */
  size: {
    type: String as PropType<SizeType>,
    default: undefined,
  },
  /** 输入框占位符 */
  placeholder: propTypes.string.def(''),
  /** 是否禁用 */
  disabled: propTypes.bool.def(false),
  /** 下拉面板-尺寸 */
  dropdownSize: {
    type: String as PropType<SizeType>,
    default: undefined,
  },
  /** 下拉面板-表格尺寸 */
  dropdownTableSize: {
    type: String as PropType<SizeType>,
    default: 'small',
  },
  /** 下拉面板-宽度 */
  dropdownWidth: propTypes.number.def(600),
  /** 下拉面板-高度 */
  dropdownHeight: propTypes.number.def(300),
  /** 下拉面板-是否禁用 */
  dropdownDisabled: propTypes.bool.def(false),
  /** 下拉面板-固定显示下拉面板的方向 */
  dropdownPlacement: {
    type: String as PropType<'top' | 'bottom'>,
    default: undefined,
  },
  /** 下拉面板-在下拉容器关闭时销毁内容 */
  dropdownDestroyOnClose: propTypes.bool.def(false),
  /** 下拉面板-是否将弹框容器插入于 body 内（对于嵌入到表格或者弹窗中被遮挡时需要设置为 true） */
  dropdownTransfer: propTypes.bool.def(true),
  /** 对话框-标识 */
  dialogId: propTypes.string,
  /** 对话框-宽度 */
  dialogWidth: {
    type: [String, Number] as PropType<string | number>,
    default: '60%',
  },
  /** 对话框-高度 */
  dialogHeight: {
    type: [String, Number] as PropType<string | number>,
    default: '560px',
  },
  /** 对话框-标题 */
  dialogTitle: propTypes.string.def(''),
  /** 对话框-表格尺寸 */
  dialogTableSize: {
    type: String as PropType<SizeType>,
    default: 'small',
  },
  /** 对话框-是否多选 */
  dialogMultiple: {
    type: [Boolean, Function] as PropType<boolean | (() => boolean)>,
    default: () => {
      return true;
    },
  },
};
